
public class Trycasting2//本类中info方法的调用仍然是各自类的引用调用各自的info方法
	//ֻ只不过是用tryfunc方法包装了对象转型,而在主方法中直接调用了tryfunc方法并给与参数(参数为父类或子类的引用)
{
	public static void main(String args[]){
		Students s1 = new Students("qdu");		
		SEfaculty mf = new SEfaculty("wang", 20, "ocu");
		Graduated gs = new Graduated("Lee", "Hollywood", "Shaolin");

		Trycasting2 t2 = new Trycasting2();

		t2.tryfunc(s1);
		t2.tryfunc(mf);
		t2.tryfunc(gs);

		//t2.tryfunc(new Graduated("Jacky Chen","HK Royal","Matial Arts"));

	}

	public void tryfunc(Students s){
		//System.out.println(s.name);//报错，父类引用不得调用子类特有的成元变量
		//System.out.println(s.school);//这里调用到的是父类的school，而非子类的school


		if (s instanceof SEfaculty){
			SEfaculty ms = (SEfaculty)s;
			System.out.println(s.name);//ͨ通过强制转型后 可以访问子类特有的成员
			ms.info();//可以调用子类的方法，但是info（）方法有重写，调用需要强制转型吗？
		}
		else if (s instanceof Graduated){
			Graduated gs = (Graduated)s;
			System.out.println(s.name);//ͨ通过强制转型后 可以访问子类特有的成员
			gs.info();//可以调用子类的方法，有必要吗？
		}

		//s.info();//父类引用访问父类info方法吗???  动态邦定在这里！
		

		//动态邦定是指,在父类引用指向子类对象的情况下,若子类重写父类的成员方法,则父类引用可以直接访问子类的此方法，不需要强制转型
		//成员变量无法动态邦定，但是成员方法可以，所以多态（动态邦定）是针对成员方法的
		//思考，如何使成员变量也实现多态（动态邦定）？
		//s.get();
	}
}